package com.sz.biz.logistics.ord.service;

import com.sz.common.base.dto.QResultDto;
import com.sz.common.base.dto.QueryParams;
import com.sz.biz.logistics.ord.entity.OrdOrder;
import com.sz.biz.logistics.ord.entity.OrdOrderTracking;
import com.sz.biz.logistics.ord.entity.OrdServiceOrder;
import com.sz.biz.logistics.ord.dto.OrdServiceOrderDto;

import java.util.List;

/**
 * Function: 服务订单service <br>
 * Author: hpeng.wang <br>
 * Date: 2017-03-31 13:46:00
 */

public interface OrdServiceOrderService {
    /**
     * 根据服务订单的dto，保存服务订单
     *
     * @param ordServiceOrderDto 新增的实体
     * @return 新增是否成功
     */
    String saveServiceOrderDto(OrdServiceOrderDto ordServiceOrderDto);

    OrdServiceOrder save(OrdServiceOrder ordServiceOrder);

    /**
     * 根据服务的运单编号集合删除实体
     *
     * @param serviceOrderNos 主键id集合
     */
    void batchDeleteByServiceOrderNos(List<String> serviceOrderNos);

    /**
     * 根据服务运单编号更新实体
     *
     * @param serviceOrderDto 要更新实体的dto
     */
    void updateDtoByServiceOrderNo(OrdServiceOrderDto serviceOrderDto);

    /**
     * 根据订单的编号来修改服务订单的状态
     *
     * @param serviceOrderNo
     */
    void updateStatusByServiceOrderNo(String serviceOrderNo);

    /**
     * 根据运单编号查询（serviceOrderNo）查询服务订单dto信息
     *
     * @param serviceOrderNo 服务运单编号
     * @return 服务订单dto
     */
    OrdServiceOrderDto findDtoByServiceOrderNo(String serviceOrderNo);

    OrdServiceOrder findUnFinishByServiceOrderNo(String serviceOrderNo);

    /**
     * 根据集合信息查询数据
     *
     * @param params 查询的参数集
     * @return 查询出的数据
     */
    QResultDto findDtoByParam(QueryParams params);


    /**
     * 根据订单编号修改对应的服务商订单的状态
     *
     * @param orderNo:           订单的编号
     * @param serviceUid:服务商的编号
     * @param serviceStatus:要修改的状态
     */
    void updateStatus(String orderNo, String serviceUid, Integer serviceStatus);

    /**
     * 根据订单的编号查对应的服务商的订单
     *
     * @param orderNo
     * @param serviceUid
     * @return
     */
    OrdServiceOrder findByOrderNo(String orderNo, String serviceUid);

    /**
     * 在物流信息返回时，处理服务订单的状态，同时处理是否需要新发一个服务订单数据
     *
     * @param entry
     * @param order
     */
    void processAfterTracking(int status,String code,String serviceUid, OrdOrder order);
    void batchSave(List<OrdServiceOrder> serviceOrderList);
}
